#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <dos.h>
#include <conio.h>
#include <string.h>


/*-------------------- Max Values ----------------*/
#define  IMSIZE    128


/*-------------------- Global Declarations ----------------*/
#define  BYTE    unsigned char
#define  INT     unsigned int
#define  BYTPTR  (BYTE *)
#define  INTPTR  (int *)
#define  TRUE    1
#define  FALSE   0

BYTE  far ** WrkIm1;
int   far ** IntIm1;

void far * *FarrAlloc (int rows, int cols, INT size);
void FarrFree (void far * *array, int rows);
void * *ArrAlloc (int rows, int cols, INT size);
void ArrFree (void * *array, int rows);


/*****************************  MAIN  ********************************/
void main (void)
{
   INT  i;

   WrkIm1 = FarrAlloc (IMSIZE, IMSIZE, 1);
   IntIm1 = FarrAlloc (IMSIZE, IMSIZE, 2);

   ImageProcessing ();

   FarrFree (WrkIm1, IMSIZE);
   FarrFree (IntIm1, IMSIZE);
}



/*#######################  Array Allocation  ############################*/
void far* *FarrAlloc (rows, cols, size)
int rows, cols;
INT size;
{
  void far* *array;
  int i,j;

  array = malloc (rows * sizeof (void far*));

  size = cols * size;
  for (i=0; i<rows; i++) {
    array[i] = _fmalloc (size);
    if (array[i] == NULL) {
      printf ("\n*****  FarrAlloc:  OFF HEAP  *****\n");
      for (j=i-1; j>=0; j--)
	_ffree(array[j]);
      free (array);
      return (NULL);
    }
  }
  return (array);
}

void FarrFree (array, rows)
void far* *array;
int rows;
{
  int i;
  for (i=0; i<rows; i++) _ffree (array[i]);
  free (array);
  return;
}

void **ArrAlloc (rows, cols, size)
int rows, cols;
INT size;
{
  void **array;
  int i,j;

  array = malloc (rows * sizeof (int));

  for (i=0; i<rows; i++) {
    array[i] = malloc (cols * size);
    if (array[i] == NULL) {
      printf ("\n*****  ArrAlloc:  OFF HEAP  *****\n");
      for (j=i-1; j>=0; i--) free(array[i]);
      free (array);
      return (NULL);
    }
  }
  return (array);
}

void ArrFree (array, rows)
void **array;
int rows;
{
  int i;
  for (i=0; i<rows; i++) free (array[i]);
  free (array);
  return;
}



/*#######################################################################*/

void ImageProcessing ()
{
}

